/**
 * 版权所有(C)，上海海鼎信息工程股份有限公司，2007，所有权利保留。
 * 
 * 项目名：	rumba
 * 文件名：	ISubscriberMgr.java
 * 模块说明：	
 * 修改历史：
 * Oct 30, 2007 - lxm - 创建。
 */
package com.hd123.rumba.mscb.subscriber;

import java.util.List;

import net.sf.hibernate.HibernateException;

import com.hd123.rumba.exception.BusinessException;
import com.hd123.rumba.runtime.biz.IBManager;

/**
 * 订阅者 | 管理员 | 接口类
 * 
 * @author lxm
 * 
 */
public interface ISubscriberMgr extends IBManager {

  /**
   * 将一个业务系统的用户或角色转换为Subscriber。
   * 
   * @param nature
   *          指定业务系统的用户或角色。
   * @return 订阅者对象。
   * @throws BusinessException
   */
  public Subscriber toSubscriber(Object nature) throws BusinessException;

  /**
   * 将一个Subscriber转换为业务系统的用户或角色。
   * 
   * @param subscriber
   *          指定订阅者对象。
   * @return 业务系统的用户或角色。
   * @throws BusinessException
   * @throws HibernateException
   */
  public Object toNature(Subscriber subscriber) throws BusinessException, HibernateException;

  /**
   * 取得角色中所有的用户。
   * 
   * @param role
   *          指定的角色。
   * @return 返回用户列表，若找不到则返回空的列表。
   * @throws BusinessException
   * @throws HibernateException
   */
  public List<Subscriber> getUsersByRole(Subscriber role) throws BusinessException,
      HibernateException;

  /**
   * 取得用户拥有的所有的角色。
   * 
   * @param user
   *          指定的用户。
   * @return 返回角色列表，若找不到则返回空列表。
   * @throws BusinessException
   * @throws HibernateException
   */
  public List<Subscriber> getRolesByUser(Subscriber user) throws BusinessException,
      HibernateException;

  /**
   * 判断指定的订阅者是否是有效的。
   * 
   * @param subscriber
   *          指定订阅者。
   * @return
   * @throws BusinessException
   * @throws HibernateException
   */
  public boolean isValid(Subscriber subscriber) throws BusinessException, HibernateException;

  /**
   * 检查指定的用户与角色是否相关。
   * 
   * @param role
   *          指定的角色。
   * @param user
   *          指定的用户。
   * @return
   * @throws BusinessException
   * @throws HibernateException
   */
  public boolean relative(Subscriber role, Subscriber user) throws BusinessException,
      HibernateException;
}
